﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entity.Framework;
using System.Data.Objects;

namespace Business.Operations
{
    public class MusabakaOperation
    {
        private static HPDMASEntities db = new HPDMASEntities();

        public MusabakaOperation()
        {

        }

        public static List<Musabaka> MusabakaGetAll()
        {
            var musabakaListesi = db.Musabaka.ToList();
            return musabakaListesi;
        }

        public static Musabaka MusabakaGetByMusabakaId(int musabakaId)
        {
            var musabaka = (from c in db.Musabaka where c.MusabakaID == musabakaId select c).First();
            return musabaka;
        }

        public static void MusabakaInsert(Musabaka musabaka)
        {
            db.Musabaka.AddObject(musabaka);
            db.SaveChanges();
        }

        public static void MusabakaUpdate(Musabaka m)
        {
            db.Musabaka.ApplyCurrentValues(m);
            db.SaveChanges();
        }

        public static List<object> MusabakaGetAllGetBySehirId(int sehirId)
        {
            var musList = db.Musabaka.
                Where(c => c.Mac.SehirID == sehirId).
                OrderByDescending(c => c.Mac.MacTarihi).
                Select(c => new
                {
                    MüsabakaId=c.MusabakaID,
                    MüsabakaKodu = c.Mac.Lig.LigAdi,
                    MaçKodu = c.Mac.MacKodu,
                    EvSahibiTakım = c.Mac.EvSahibiTakim.TakimAdi,
                    MisafirTakım = c.Mac.MisafirTakim.TakimAdi,
                    Tarih = c.Mac.MacTarihi,
                    Gün = c.Mac.MacTarihi,
                    Saat = c.Mac.MacSaati,
                    Hafta = c.Mac.MacHafta,
                    MaçınOynanacağıStad = c.Mac.Stat.StatAdi,
                    İl = c.Mac.Sehir.SehirAdi,
                    İlçe = c.Mac.Ilce.IlceAdi,
                    Hakem = c.HakemNfs.KullaniciNfsAdi + c.HakemNfs.KullaniciNfsSoyadi,
                    YardımcıHakem1 = c.YardimciHakem1Nfs.KullaniciNfsAdi + c.YardimciHakem1Nfs.KullaniciNfsSoyadi,
                    YardımcıHakem2 = c.YardimciHakem2Nfs.KullaniciNfsAdi + c.YardimciHakem2Nfs.KullaniciNfsSoyadi,
                    Gözlemci = c.GozlemciNfs.KullaniciNfsAdi + c.GozlemciNfs.KullaniciNfsSoyadi
                });

            //Burada KullaniciNfsID ler düzenli değil. Düzeltilecek.

            //var musList = (from c in db.Musabaka where c.Mac.SehirID == sehirId select c).ToList();
            List<object> list = new List<object>(musList.ToList());
            return list;
        }

        public static List<object> MusabakaAnonimGetAllGetBySehirId(int sehirId)
        {
            var musList = db.Musabaka.
                Where(c => c.Mac.SehirID == sehirId).
                OrderByDescending(c => c.Mac.MacTarihi).
                Select(c => new
                {
                    Tarih = c.Mac.MacTarihi,
                    Gün = c.Mac.MacTarihi,
                    Saat = c.Mac.MacSaati,
                    EvSahibiTakım = c.Mac.EvSahibiTakim.TakimAdi,
                    MisafirTakım = c.Mac.MisafirTakim.TakimAdi,
                    Hafta = c.Mac.MacHafta,
                    İlçe = c.Mac.Ilce.IlceAdi,
                    MaçınOynanacağıStad = c.Mac.Stat.StatAdi,
                    Hakem = c.HakemNfs.KullaniciNfsAdi + c.HakemNfs.KullaniciNfsSoyadi,
                    YardımcıHakem1 = c.YardimciHakem1Nfs.KullaniciNfsAdi + c.YardimciHakem1Nfs.KullaniciNfsSoyadi,
                    YardımcıHakem2 = c.YardimciHakem2Nfs.KullaniciNfsAdi + c.YardimciHakem2Nfs.KullaniciNfsSoyadi,
                    Gözlemci = c.GozlemciNfs.KullaniciNfsAdi + c.GozlemciNfs.KullaniciNfsSoyadi
                });

            //Burada KullaniciNfsID ler düzenli değil. Düzeltilecek.

            //var musList = (from c in db.Musabaka where c.Mac.SehirID == sehirId select c).ToList();
            List<object> list = new List<object>(musList.ToList());
            return list;
        }

        public static int MusabakaIdGetByMacId(int macId)
        {
            var musabakaId = db.Musabaka.
                Where(c => c.MacID == macId).
                Select(c => c.MusabakaID).FirstOrDefault();
            return musabakaId;
        }

        public static List<object> MusabakaHakemUcretleriGetByMusabakaId(int musabakaId)
        {
            var musabakaHakemUcrtleriListesi = db.Musabaka.
            Where(c => c.MusabakaID == musabakaId).
            Select(c => new
            {
                Hakem = c.HakemNfs.KullaniciNfsAdi + c.HakemNfs.KullaniciNfsSoyadi,
                YardımcıHakem1 = c.YardimciHakem1Nfs.KullaniciNfsAdi + c.YardimciHakem1Nfs.KullaniciNfsSoyadi,
                YardımcıHakem2 = c.YardimciHakem2Nfs.KullaniciNfsAdi + c.YardimciHakem2Nfs.KullaniciNfsSoyadi,
                Gözlemci = c.GozlemciNfs.KullaniciNfsAdi + c.GozlemciNfs.KullaniciNfsSoyadi,

                HakemNetÜcret = c.HakemNetUcreti,
                YardımcıHakem1NetÜcret = c.YardimciHakem1NetUcreti,
                YardımcıHakem2NetÜcret = c.YardimciHakem2NetUcreti,
                GözlemciNetÜcret = c.GozlemciNetUcreti,

                HakemDernekKesintisi = c.HakemDernekKesintiBedeli,
                YardımcıHakem1DernekKesintisi = c.YardimciHakem1DernekKesintiBedeli,
                YardımcıHakem2DernekKesintisi = c.YardimciHakem2DernekKesintiBedeli,
            });

            List<object> list = new List<object>(musabakaHakemUcrtleriListesi.ToList());
            return list;
        }

        public static string HakemNfsAdiSoyadiGetByMusabakaId(int musabakaId)
        {
            var hakemAdSoyad = db.Musabaka.
                Where(c => c.MusabakaID == musabakaId).
                Select(c => c.HakemNfs.KullaniciNfsAdi + " " + c.HakemNfs.KullaniciNfsSoyadi).FirstOrDefault();
            return hakemAdSoyad;
        }

        public static string GozlemciNfsAdiSoyadiGetByMusabakaId(int musabakaId)
        {
            var gozlemciAdSoyad = db.Musabaka.
                Where(c => c.MusabakaID == musabakaId).
                Select(c => c.GozlemciNfs.KullaniciNfsAdi + " " + c.GozlemciNfs.KullaniciNfsSoyadi).FirstOrDefault();
            return gozlemciAdSoyad;
        }

        public static string YardimciHakem1NfsAdiSoyadiGetByMusabakaId(int musabakaId)
        {
            var yrdHakem1AdSoyad = db.Musabaka.
                Where(c => c.MusabakaID == musabakaId).
                Select(c => c.YardimciHakem1Nfs.KullaniciNfsAdi + " " + c.YardimciHakem1Nfs.KullaniciNfsSoyadi).FirstOrDefault();
            return yrdHakem1AdSoyad;
        }

        public static string YardimciHakem2NfsAdiSoyadiGetByMusabakaId(int musabakaId)
        {
            var yrdHakem2AdSoyad = db.Musabaka.
                Where(c => c.MusabakaID == musabakaId).
                Select(c => c.YardimciHakem2Nfs.KullaniciNfsAdi + " " + c.YardimciHakem2Nfs.KullaniciNfsSoyadi).FirstOrDefault();
            return yrdHakem2AdSoyad;
        }

        public static int LigIdGetByMusabakaId(int musabakaId)
        {
            var ligId = db.Musabaka.
                Where(c => c.MusabakaID == musabakaId).
                Select(c => c.Mac.LigID).First();
            return (Int32)ligId;
        }
    }
}
